/*
 * ExitListener.cpp
 */

#include "ExitListener.h"
#include <string>
#include <iostream>

ExitListener::ExitListener(int argc, char* argv[], Port ctrlPort,
		LogFile& logFile):logFile(logFile) {
	listeningPort = ctrlPort;
	socketListening = true;
	std::string searchedComm("-q");
	int i = 0;
	while (i < argc && socketListening) {
		if (std::string(argv[i]) == searchedComm)
			socketListening = false;
		++i;
	}
}

ExitListener::~ExitListener() {}

void ExitListener::waitForExitEvent() {
	if (socketListening) {
		// Se escuchan eventos de salida en el socket del puerto de control
		try {
			ServerSocket ctrlSocket( listeningPort );
			char tecla = 0;
			while (tecla != 'q'){
				Socket* s = ctrlSocket.accept();

				s->recv(&tecla, sizeof(tecla));
				s->send(&tecla, sizeof(tecla));	// Hace "eco"

				s->close();
				delete s;
			}
			ctrlSocket.close();
		}
		catch (const SocketException& e) {
			logFile.addSystemError("Excepción en socket de control.");
		}
	}
	else {
		// Se escuchan eventos de salida por stdin
		char tecla = 0;
		while(std::cin >> tecla && tecla != 'q');
	}
}
